package com.cskaoyan.javase.array._5operation._0traverse;

/**
 * @description: 数组的遍历操作
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 什么叫数组的遍历? 把数组中元素逐个得访问一遍,一般都是从头到尾的
 *
 * d代码需要不断的迭代,不断的完善,得出最优解
 *
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        /*System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //改进: 用for循环改进
        for (int i = 0; i < 3; i++) {
            System.out.println(arr[i]);
        }
        //一般遍历数组for循环的模板
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }*/
        //快捷键: 数组名.fori
        //长度为0的数组
        //arr = new int[]{};
        //等于null的数组
        //arr = null;
        traverse5(arr);
    }

    //数组的遍历方法,最简单的
    public static void traverse(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    //改进1: 让数组的遍历更加美观,表现为[1,2,3]的形式
    public static void traverse2(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //最后多了一个逗号,常规的想法是,if判断,如果是最后一个元素不加","
            /*if (i == arr.length - 1) {
                System.out.print(arr[i]);
                break;
            }*/
            System.out.print(arr[i] + ", ");
        }
        // 退格\b
        System.out.println("\b\b]");
    }

    //改进2: 允许方法输入长度为0的数组.如果输入长度为0的数组,那么我们输出[],然后再加一个友好提示
    public static void traverse3(int[] arr) {
        //判断数组长度是否为0
        if (arr.length == 0) {
            System.out.println("您输入了一个长度为0的数组!");
            System.out.println("该数组中没有任何元素[]");
            return;
        }
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ", ");
        }
        System.out.println("\b\b]");
    }

    //改进3: 允许输入null数组,同样给出友好提示
    public static void traverse4(int[] arr) {
        //if判断数组是否等null
        if (arr != null) {
            //判断数组长度是否为0
            if (arr.length == 0) {
                System.out.println("您输入了一个长度为0的数组!");
                System.out.println("该数组中没有任何元素[]");
                return;
            }
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + ", ");
            }
            System.out.println("\b\b]");
        } else {
            System.out.println("您输入的是一个null数组,请重新输入!~");
        }
    }

    //改进4: 写if的时候,尽量让大括号少包括一些内容,在上面的案例中尽量判断==,而不是!=
    public static void traverse5(int[] arr) {
        //if判断数组是否等null
        if (arr == null){
            System.out.println("您输入的是一个null数组,请重新输入!");
            return;
        }
        //判断数组长度是否为0
        if (arr.length == 0) {
            System.out.println("您输入了一个长度为0的数组!");
            System.out.println("该数组中没有任何元素[]");
            return;
        }
        //当程序能够运行到这里时,arr数组一定是一个长度不为0,也不是null的数组
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + ", ");
        }
        System.out.println("\b\b]");
    }
}

